from Grafo import Grafo
import turtle
import argparse
import math
import Cores

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("ordem", help="Exemplo: 4x4")
    parser.add_argument("inicio", help="Índice do vértice em que a coloração começará")
    args = parser.parse_args()

    ordem = int(args.ordem.split('x')[0])
    # if(ordem > 16):
    #     raise Exception("Não ultrapasse 16x16.")

    if math.sqrt(ordem) * math.sqrt(ordem) != ordem:
        raise Exception("Não é um quadrado perfeito.")

    if(math.sqrt(ordem) != int(math.sqrt(ordem))):
        raise Exception("Não é uma raiz exata.")
            
    verticeInicial = int(args.inicio)
    if verticeInicial < 0 or verticeInicial >= (ordem*ordem):
        raise Exception("Vertice deve estar entre 0 e " + str(ordem*ordem-1) + ".")
    
        
    vertices = (ordem*ordem) * ['']
    vertices[verticeInicial] = 1
    sudoku = Grafo(vertices)
    if not sudoku.dSatur():
        raise Exception("Solução não encontrada.")

    turtle.hideturtle()
    turtle.tracer(0, 0)
    x = -230
    y = 320
    side = 25
    i = 0
    for vertices in sudoku.vertices:

        if i % ordem == 0:
            y -= side
            turtle.penup()
            turtle.setpos(x, y)
            turtle.pendown()

        turtle.fillcolor(Cores.obtemCor(sudoku.vertices[vertices].getLabel()))
        turtle.begin_fill()

        for j in range(4):
            if j == 3:
                turtle.write(" " + str(sudoku.vertices[vertices].getLabel()), align='left', font=('Arial', 13, 'normal'))
            turtle.forward(side)
            turtle.right(90)

        turtle.end_fill()

        turtle.forward(side)

        i += 1
    turtle.done()
